# -*- coding:utf-8 -*-
# @Time    : 2021/06/07 11:22
# @Author  : wangleip
# @Remark  : SqlServer数据库操作工具类
# @Software: PyCharm

import pyodbc
import config

class DbExecutor:
    """
    SqlServer数据库操作工具类
    """

    def __init__(self):
        """
        类构造函数
        :param server: 数据库服务器地址
        :param database: 数据库名称
        :param user: 用户名称
        :param password: 用户密码
        """
        self.data_base_server = config.DATA_BASE_SERVER
        self.data_base_server_port = config.DATA_BASE_SERVER_PORT
        self.data_base_name = config.DATA_BASE_NAME
        self.data_base_user = config.DATA_BASE_UID
        self.data_base_password = config.DATA_BASE_PW

    def get_connect(self):
        """
        获取数据库连接对象
        :return: 数据库连接对象
        """
        connectStr = "SERVER={},{};DATABASE={};UID={};PWD={}".format(self.data_base_server,
                                                                     self.data_base_server_port,
                                                                     self.data_base_name,
                                                                     self.data_base_user,
                                                                     self.data_base_password)

        connectStr = "DRIVER={SQL Server};" + connectStr
        return pyodbc.connect(connectStr)

    def qurey(self, sql, *params):
        """
        执行数据库查询脚本并返回结果
        :param sql: 查询脚本
        :param params: 参数
        :return: 结果
        """
        # 获取数据库连接
        conn = self.get_connect()
        # 使用cursor()方法获取操作游标
        cursor = conn.cursor()
        try:
            # 执行SQL语句
            cursor.execute(sql, params)
            # 获取所有记录列表
            results = cursor.fetchall()
            return results
        except pyodbc.Error as e:
            print(e)
            return None
        finally:
            # 关闭数据库连接
            cursor.close()
            # 关闭数据库连接
            conn.close()

    def single(self, sql, *params):
        """
        查询一条记录
        :param sql: 查询脚本
        :param params: 参数
        :return: 结果
        """
        # 获取数据库连接
        conn = self.get_connect()
        # 使用cursor()方法获取操作游标
        cursor = conn.cursor()
        try:
            # 执行SQL语句
            cursor.execute(sql, params)
            # 获取所有记录列表
            results = cursor.fetchone()
            return results
        except pyodbc.Error as e:
            print(e)
            return None
        finally:
            # 关闭数据库连接
            cursor.close()
            # 关闭数据库连接
            conn.close()

    def execute(self, sql, *params):
        """
        执行数据库脚本
        :param sql: 查询脚本
        :param params: 参数
        :return: 影响记录条数
        """
        # 获取数据库连接
        conn = self.get_connect()
        # 使用cursor()方法获取操作游标
        cursor = conn.cursor()
        try:
            # 执行SQL语句
            cursor.execute(sql, params)
            conn.commit()
            return cursor.rowcount
        except pyodbc.Error as e:
            print(e)
            conn.rollback()
            return 0
        finally:
            # 关闭数据库连接
            cursor.close()
            # 关闭数据库连接
            conn.close()
